package mybatis.plus;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * Mybatis-plus 代码生成
 */
public class Generator {

  public static void main(String[] args) {
    AutoGenerator mpg = new AutoGenerator();

    // 全局配置
    GlobalConfig gc = new GlobalConfig();
    gc.setOutputDir("E:/mybatis_plus_output");
    gc.setFileOverride(true);
    gc.setActiveRecord(false);
    gc.setEnableCache(false);// XML 二级缓存
    gc.setBaseResultMap(true);// XML ResultMap
    gc.setBaseColumnList(true);// XML columList
    gc.setAuthor("Arnold Yang");
    gc.setOpen(true);

    // 自定义文件命名，注意 %s 会自动填充表实体属性！
    gc.setMapperName("I%sDao");
    gc.setXmlName("%sMapper");
    gc.setServiceName("I%sService");
    gc.setServiceImplName("%sServiceImpl");
    gc.setControllerName("%sController");
    mpg.setGlobalConfig(gc);

    // 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setDbType(DbType.MYSQL);
    dsc.setDriverName("com.mysql.jdbc.Driver");
    dsc.setUrl("jdbc:mysql://localhost:3306/www_etl_com?characterEncoding=UTF-8");
    dsc.setUsername("root");
    dsc.setPassword("123456");
    mpg.setDataSource(dsc);

    // 策略配置
    StrategyConfig strategy = new StrategyConfig();
    // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
    strategy.setTablePrefix(new String[] { "mfq_", "tsys_", "etl_" });//
    // 此处可以修改为您的表前缀
    strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
    strategy.setInclude(new String[] { "etl_user", "etl_user_data" }); // 需要生成的表
    // strategy.setExclude(new String[]{"test"}); // 排除生成的表
    strategy.setSuperControllerClass("com.etl.base.BaseController");
    strategy.setSuperEntityClass("com.xr.model.Model");
    strategy.setSuperEntityColumns("version", "create_time","update_time");
    strategy.setEntityBuilderModel(true);
    strategy.entityTableFieldAnnotationEnable(true);
    strategy.setSuperServiceClass("com.xr.service.IBaseService");
    strategy.setSuperServiceImplClass("com.xr.service.impl.BaseServiceImpl");
    mpg.setStrategy(strategy);

    // 包配置
    PackageConfig pc = new PackageConfig();
    pc.setParent("com.etl");
    pc.setModuleName("user");

    // set default package name
    pc.setEntity("model");
    pc.setXml("mapper");
    pc.setMapper("dao");
    pc.setService("service");
    pc.setServiceImpl("service.impl");
    pc.setController("controller");
    mpg.setPackageInfo(pc);

    // 执行生成
    mpg.setTemplateEngine(new UserDefineTemplateEngine());
    mpg.execute();
  }
}